package com.party.admin.biz.quartz;

import com.party.core.model.notify.Event;
import org.quartz.CronTrigger;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.TriggerKey;

import java.util.List;

/**
 *
 * 定时任务接口
 * Created by wei.li
 *
 * @date 2017/4/12 0012
 * @time 10:24
 */
public interface ISchsduleService {

    /**
     * 获取触发器key
     *
     * @param jobName 任务名称
     * @return triggerkey
     */
    TriggerKey getTriggerKey(String jobName);

    /**
     * 获取表达式触发器
     *
     * @param scheduler 调度者
     * @param jobName 任务名称
     * @return 表达式
     */
    CronTrigger getCronTrigger(Scheduler scheduler, String jobName);

    CronTrigger getCronTrigger(Scheduler scheduler, String triggerName, String group);

    void removeTrigger(Scheduler scheduler, String triggerName, String group);

    /**
     * 创建任务
     *
     * @param scheduler 调度者
     * @param event 事件名称
     */
    void createScheduleJob(Scheduler scheduler, Event event, String bizId, String group, List<Object> params);

    /**
     * 创建定时任务
     *
     * @param scheduler 调度者
     * @param jobName 任务名称
     * @param cronExpression 表达式
     * @param isSync 是否异步
     */
    void createScheduleJob(Scheduler scheduler, String jobName, String cronExpression, boolean isSync, Event event,
                           String bizId, String group, List<Object> params);


    /**
     * 运行一次任务
     *
     * @param scheduler 调度者
     * @param jobName 任务名称
     */
    void runOnce(Scheduler scheduler, String jobName);


    /**
     * 暂停任务
     *
     * @param scheduler 调度者
     * @param jobName 任务名称
     */
    void pauseJob(Scheduler scheduler, String jobName);


    /**
     * 恢复任务
     *
     * @param scheduler 调度者
     * @param jobName 任务名称
     */
    void resumeJob(Scheduler scheduler, String jobName);

    /**
     * 获取jobKey
     *
     * @param jobName 任务名称
     * @return jobKey
     */
    JobKey getJobKey(String jobName);

    /**
     * 更新定时任务
     *
     * @param scheduler 调度者
     * @param event 事件名称
     */
    void updateScheduleJob(Scheduler scheduler, Event event, String bizId, String group);

    /**
     * 更新定时任务
     *
     * @param scheduler 调度者
     * @param jobName 任务名称
     * @param cronExpression 表达式
     */
    void updateScheduleJob(Scheduler scheduler, String jobName, String cronExpression, String bizId, String group);

    /**
     * 删除定时任务
     *
     * @param scheduler 调度者
     * @param jobName 任务名称
     */
    void deleteScheduleJob(Scheduler scheduler, String jobName);
}
